<?php
/**
 * Crud para gerenciamento do módulo de newsletter
 */
class PC4_Crud_NewslettersEmails extends PC4_Crud_MuitosParaMuitos {
    
	public $tabelaClientes;
	
   public function __construct($config = array(), $tbCategoria = null, $tabelaRel = null, $fk = null, $fkCategoria = null, $pkCategoria = 'id', $nomeCategoria = 'nome', $definition = null) {
   	parent::__construct($config, $tbCategoria, $tabelaRel, $fk, $fkCategoria, $pkCategoria, $nomeCategoria, $definition);
    	if(empty($tabelaClientes)){  	
    		$this->tabelaClientes = 'newsletter_clientes';
  		}
		$this->mEmailRelLista = new Zend_Db_Table($this->tabelaRel);
   }
	
	/**
	 * Modifica a listagem do modelo trazendo os clientes
	 * @param $where
	 * @param $order
	 * @param $count
	 * @param $offset
	 * @return Zend_Db_Table_Rowset
	 */	
	public function preparaConsulta(&$where = null, $order = null, $count = null, $offset = null){
		$aliasClientes = $this->getAlias($this->tabelaClientes);
		$select = parent::preparaConsulta($where, $order, $count, $offset);
		$select->join(
        	array($aliasClientes => $this->tabelaClientes), 
			$aliasClientes . '.id = ' . $this->aliasCategoria . '.id_' . $this->tabelaClientes,
			array('cliente' => $aliasClientes . '.nome', 'id_' . $this->tabelaClientes => $aliasClientes . '.id')
        );
        $where = $select;
        return $select;
	}
	
	/**
	 * Persiste os emails na tabelaRel
	 * @param $idFk O id da categoria(lista) dos emails
	 * @return array($inseridos, $naoInseridos) retorna um array
	 */
	public function persisteEmailsRelacionados($idFk){
		// testando insercao
		if(empty($_FILES['arquivo']['tmp_name'])){return null;}
		try {
			
//$fp = fopen('teste_erivando.txt', 'w+'); 
			$emails = file($_FILES['arquivo']['tmp_name']); 
			if(!empty($emails)){	
				$rsEmailsCadastrados = $this->getLista('nlrne.id_newsletter_listas = ' . $idFk);
				foreach($rsEmailsCadastrados as $r){
		    		$emailsCadastrados[] = $r->email;
				}
		    	$bean = array();
		    	foreach($emails as $email){
						$email = trim($email);
		    			if(!empty($emailsCadastrados)){
							if(in_array($email, $emailsCadastrados)){
								$naoInseridos[] = $email;
								continue;
							}
						}
						
						//ve se o email ja está cadastrado na base
						$select = $this->getSelect();
						$select->setIntegrityCheck(false);
						$select->joinLeft(array('nrln' => 'newsletter_listas_rel_newsletter_emails'), 'nrln.id_newsletter_emails = ne.id AND nrln.id_newsletter_listas = ' . $idFk);
						$select->where("email = '$email'");
						$r = $this->fetchRow($select);
//fwrite($fp, print_r($r->email, true));

						if(empty($r->id)){
							//guarda o registro do email
							$bean['email'] = $email;	    	
							$idEmail = $this->insert($bean);
						}else{
							$idEmail = $r->id;
						}	
						
						// guarda o relacionamento email x lista
						if (empty($r->id_newsletter_emails)) {
							$rRelacionamento['id_newsletter_listas'] = $idFk;
							$rRelacionamento['id_newsletter_emails'] = $idEmail;
							$id = $this->mEmailRelLista->insert($rRelacionamento);
						}
						
						if(is_numeric($idEmail)){
		    				$inseridos[] = $email;
		    			}
		    	}
			}
			
//fclose($fp);
		} catch (Exception $e) {
		}
		return array('inseridos' => $inseridos, 'naoInseridos' => $naoInseridos);
    }
    
    
    /**
     *  Apaga os emails na tabelaRel
	 * 	@param $idFk O id da categoria(lista) dos emails
     */
	public function apagaEmailsRelacionados($idFk){
		try{
			$this->mEmailRelLista->delete('id_newsletter_listas = ' . $idFk);
		}catch (Exception $e){}	
	}
}